package com.beviswong.themedemo

import android.content.Context
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatDelegate

object NightManager {
    private const val PREF_NIGHT = "pref_night"
    private const val PREF_NAME = "night_prefs"

    /**
     * 初始化夜间模式
     * @param context
     */
    fun init(context: Context) {
        val userMode = getNightMode(context)
        AppCompatDelegate.setDefaultNightMode(userMode)
    }

    /**
     * 保存夜间模式配置
     * @param context
     * @param mode 夜间模式配置
     * * [AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM]
     * * [AppCompatDelegate.MODE_NIGHT_NO]
     * * [AppCompatDelegate.MODE_NIGHT_YES]
     */
    fun saveNightMode(context: Context, mode: Int) {
        val prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
        prefs.edit().putInt(PREF_NIGHT, mode).apply()
        AppCompatDelegate.setDefaultNightMode(mode)
    }

    /**
     * 从SharedPreferences获取保存的夜间模式配置
     * @param context
     * @return 夜间模式配置
     * * [AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM]
     * * [AppCompatDelegate.MODE_NIGHT_NO]
     * * [AppCompatDelegate.MODE_NIGHT_YES]
     */
    fun getNightMode(context: Context): Int {
        val prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
        return prefs.getInt(PREF_NIGHT, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
    }

    /**
     * 获取当前系统的夜间模式配置
     * @param context 上下文
     * @return 当前系统的夜间模式配置
     */
    fun getSystemNightMode(context: Context): Int {
        return context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
    }
}